//ADC0808
//STC89C52RC
//数码管共阳
//供电5v
//PT100 热电偶

#include  <reg51.h>	//头文件
#include<math.h>

#define uchar unsigned char		//宏定义
#define uint unsigned int
	
sbit STAR=P2^4;
sbit EOC=P2^6;
sbit CLOCK=P2^5;
sbit OE=P2^7;

sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;

uchar getdata;
double change;
long int temp;

uchar code table1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40}; //0-9,-,无小数点
uchar code table2[]={0xbF,0x86,0xdB,0xcF,0xe6,0xeD,0xfD,0x87,0x7fF,0xeF};     //0-9,小数点
uchar dispbuf[6];

/****************************************************************************************/
//延时函数：带有入口参数m，代表ms毫秒
//
/****************************************************************************************/
void delay_ms(uchar m)
{
	unsigned int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<123;j++)
		{;}
	}
}
/****************************************************************************************/
//
//数码管显示程序
/****************************************************************************************/
void display()
{
	P0=table1[dispbuf[3]];//显示百位
	P20=0;
	P21=1;
	P22=1;
	P23=1;
	delay_ms(2);
	P0=0X00;
	P0=table1[dispbuf[2]];//显示十位
	P20=1;
	P21=0;
	P22=1;
	P23=1;
	delay_ms(2);
	P0=0X00;
	P0=table2[dispbuf[1]];//显示个位
	P20=1;
	P21=1;
	P22=0;
	P23=1;
	delay_ms(2);
	P0=0X00;
	P0=table1[dispbuf[0]];//显示小数位
	P20=1;
	P21=1;
	P22=1;
	P23=0;
	delay_ms(2);
	P0=0X00;
}
/****************************************************************************************/
//
//计算温度
/****************************************************************************************/
void PT100()
{
 double deal,U;// 
	U=5.0/255.0*getdata;
	deal=U*20*10;
	temp=(long int)deal;
	if(U<5.2&&U>0)
	{    
    	dispbuf[0]=temp%10;
		dispbuf[1]=temp/10%10;
		dispbuf[2]=temp/100%10;
		dispbuf[3]=temp/1000;	
	}
	else
 {
	  dispbuf[0]=0;
		dispbuf[1]=0;
		dispbuf[2]=0;
		dispbuf[3]=0;	
	 
  }
		
  display();
}

void main()
{
	TMOD = 0x10;					//定时器0，工作在定时器方式
	TH1	= (65536-200)/256;		//0x3c
	TL1 = (65536-200)%256;		//0xb0
	EA = 1;							//开总中断
	ET1 = 1;						//打开（允许）定时器1中断
	TR1 =1;							//开始(启动)定时
  while(1)
	{
	  STAR=0;
		OE=0;
		STAR=1;
		STAR=0;
		while(EOC==0)
		{
		  OE=1;
			delay_ms(10);
			getdata=P1;
			OE=0;
			PT100();			
		}
	}
}
/****************************************************************************************/
//
//
/****************************************************************************************/
void t1(void) interrupt 3	using 0 //0:int0 1: t0 2: int1 3:t1 4:串行口
{
	TH1	= (65536-200)/256;		//0x3c
	TL1 = (65536-200)%256;		//0xb0
	CLOCK=~CLOCK;//给ADC0808一个时钟脉冲（0.2ms)		
}